<?php
require_once __DIR__ . '/../Controller.php';

class Models_StaffController extends Models_Controller
{
	/** スーパースタッフID */
	const VALUE_SUPER_STAFF_NAME = 'adminstaff';
	/** 名前 */
	const KEY_NAME = 'NAME';
	/** パスワード */
	const KEY_PASSWORD = "PASSWORD";
	/** 登録日 */
	const KEY_REGDATE = "REGDATE";
	/** 更新日 */
	const KEY_MODIFYDATE = "MODIFYDATE";
	
	/**
	 * 指定名前が存在する場合TRUEを返す
	 * @param unknown $name
	 * @return boolean
	 */
	public function isNameExist($name)
	{
		/** データセット中から名前を検索する */
		foreach ($this->_aryDataSet as $dataSet) {
			/** 見つかった*/
			if ($dataSet[self::KEY_NAME] = $name) {
				return TRUE;
			}
		}
		return FALSE;
	}
	
	/**
	 * 新規登録
	 * @param unknown_type $name
	 * @param unknown_type $password
	 */
	public function add($name, $password)
	{
		/** 名前の重複は事前に判定しておくこと */
		if ($this->isNameExist($name)) {
			return FALSE;
		}
		$id = self::createId();
		$regDate = time();
		$updateDate = $regDate;
		$aryData = array(
				self::KEY_ID => $id,
				self::KEY_NAME => $name,
				self::KEY_PASSWORD => $password,
				self::KEY_MODIFYDATE => $updateDate,
				self::KEY_REGDATE => $regDate,
		);
		$this->_aryDataSet[] =  $aryData;
		return TRUE;
	}
	
	/**
	 * 変更
	 * @param unknown $id
	 * @param unknown $name
	 * @param unknown $password
	 */
	public function modify($id, $password, $name='')
	{
		$aryDataset = &$this->_searchId($id);
		/** 該当IDが削除済みの場合、変更できないのでFALSEリターン */
		if ($aryDataset === FALSE) {
			return FALSE;
		}
		/** 名前変更リクエストの場合 */
		if ( $name != '' ) {
			/*** 変更後の名前に重複がないことは事前に判定しておく */
			if ($this->isNameExist($name)) {
				return FALSE;
			}
			$aryDataset[Models_StaffController::KEY_NAME] = $name;
		}
		/** パスワード変更リクエストの場合 */
		if ($password != '') {
			if ($password != $aryDataset[Models_StaffController::KEY_PASSWORD]) {
				$aryDataset[Models_StaffController::KEY_PASSWORD] = $password;
			}
		}
		return TRUE;
	}
	
	/**
	 * 名前とパスワードが一致するか
	 * @return boolean
	 */
	public function isMember($name, $password)
	{
		$bExists = FALSE;
		$searchedPassWord = '';
		/** データセット中から名前を検索する */
		foreach ($this->_aryDataSet as $dataSet) {
			/** 見つかった*/
			if ($dataSet[self::KEY_NAME] == $name) {
				$bExists = TRUE;
				$searchedPassWord = $dataSet[self::KEY_PASSWORD];
				break;
			}
		}
		/*** 一致する名前がない */
		if ($bExists == FALSE) {
			return FALSE;
		}
		/*** パスワードが一致しない */
		if ($searchedPassWord != $password) {
			return FALSE;
		}
		
		return TRUE;
	}
	
	/**
	 * パスワードを変更する
	 * @param unknown $name
	 * @param unknown $password
	 * @return boolean
	 */
	public function changePassword($name,$password)
	{
		$bExists = FALSE;
		$countDataset = count($this->_aryDataSet);
		$i = 0;
		/** データセット中から名前を検索する */
		while ($i < $countDataset) {
			/** 見つかった*/
			if ($this->_aryDataSet[$i][self::KEY_NAME] == $name) {
				// 新パスワード設定
				$this->_aryDataSet[$i][self::KEY_PASSWORD] = $password;
				$this->saveToFile();
				return TRUE;
			}
			$i ++;
		}
		/*** 一致する名前がない */
		return FALSE;
	}

}